package lang3;


import org.apache.commons.lang3.ArrayUtils;

import java.util.Objects;

/**
 * @ClassName: ArrayUtil
 * @Author: liugui
 * @Date: 2020-07-14 14:51
 **/
public class ArrayUtil {

    public static void main(String[] args) {

        /**
         * ArrayUtils 提供对数组的操作
         * 添加 查找 删除 子数组 倒序 元素类型转换等
         */
        Integer[] intArr = new Integer[]{1, 2, 3};
        Integer[] intArr2 = new Integer[]{1, 2, 3};

        arrHashCode1(intArr,intArr2);
        arrHashCode2(intArr,intArr2);
        deepEquals(intArr,intArr2);

        /**
         * 简便创建数组
         */
        Integer[] intArr3 = ArrayUtils.toArray(1, 2, 3);
        int[] ints = toPrimitive(intArr3);
        Integer[] intArr4 = toObject(ints);
        // ArrayUtils.toStringArray 存在null值 会报错
        // 可以指定将null值转成某个值
        // 例如：toStringArray(arr,"");
        String[] strs = ArrayUtils.toStringArray(intArr4);

        System.out.println(ArrayUtils.toString(ints));
        System.out.println(ArrayUtils.toString(intArr4));
        System.out.println(ArrayUtils.toString(strs));



    }

    /**
     * 相同个数、相同顺序的数组hashCode会是一样的
     */
    public static void  arrHashCode1( Integer[] intArr, Integer[] intArr2){
        System.out.println(ArrayUtils.hashCode(intArr));//862547
        System.out.println(ArrayUtils.hashCode(intArr2));//862547
    }

    /**
     * 不同值的数组 hashcode也会不同
     */
    public static void  arrHashCode2( Integer[] intArr, Integer[] intArr2){
        intArr = new Integer[]{1, 2, 3};
        intArr2 = new Integer[]{2, 2, 3};
        System.out.println(ArrayUtils.hashCode(intArr));//862547
        System.out.println(ArrayUtils.hashCode(intArr2));//863916
    }

    /**
     *  ArrayUtils.isEquals 以废弃 替代：java.util.Objects.deepEquals
     */
    public static void deepEquals(Integer[] intArr, Integer[] intArr2){
        System.out.println(Objects.deepEquals(intArr,intArr2));//true
    }

    /**
     * 转换
     */
    public static int[] toPrimitive(Integer [] intArr){
        return ArrayUtils.toPrimitive(intArr);

    }

    /**
     * 转换
     */
    public static Integer [] toObject(int[] intArr){
        return ArrayUtils.toObject(intArr);
    }
}
